import Vue from 'vue'

import VueRouter from 'vue-router'

import Storage from '@/helpers/storage.js'

import store from '@/store/store'
import * as types from '@/store/types'
import Login from '@/views/Login'
import Orders from '@/views/Orders'
import NotFound from '@/views/40X'

Vue.use(VueRouter)

// POST /api/v1/employees/authenticate
// GET /api/v1/orders.json
// Storage.get_authenticate_token('')

if(window.localStorage.authenticate_token){
  store.commit(types.LOGIN, {'token': localStorage.authenticate_token, 'uid': localStorage.authenticate_uid})
}

var router =  new VueRouter({
  mode: 'history',
  routes: [
    {
      path: '/',
      redirect: '/orders',
    },
    {
      path: '/login',
      name: 'Login',
      component: Login  // 这里 component 没有 s 不然会报错 ： vue-router.esm.js?880d:16 [vue-router] Failed to resolve async component render: TypeError: Cannot read property '_c' of undefined
    },
    {
      path: '/logout',
      name: 'Login',
      component: Login  // 这里 component 没有 s 不然会报错 ： vue-router.esm.js?880d:16 [vue-router] Failed to resolve async component render: TypeError: Cannot read property '_c' of undefined
    },
    {
      path: '/orders',
      meta: {
        requireAuth: true //需要登录才可以进入
      },
      component: Orders
    },{
      path: '*',
      component:NotFound
    }
  ]
})

/**
 * to: Route: 即将要进入的目标 路由对象
 * from: Route: 当前导航正要离开的路由
 * next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
 *      next(): 进行管道中的下一个钩子。如果全部钩子执行完了，则导航的状态就是 confirmed （确认的）。
 *      next(false): 中断当前的导航。如果浏览器的 URL 改变了（可能是用户手动或者浏览器后退按钮），那么 URL 地址会重置到 from 路由对应的地址。
 *      next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断，然后进行一个新的导航。
*/
router.beforeEach((to, from, next) => {
  if(to.matched.some(r => r.meta.requireAuth)){
    if(store.state.x_user_token){
      next()
    }else{
      next({
        path: '/login',
        query: {redirect: to.fullPath}
      })
    }
  }else{
    next();
  }
})
//
export default router
